#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//int main()
//{
//	int t = 0;
//	while (printf("*"))
//	{
//		t++;
//		if (t < 3)
//		{
//			break;
//		}
//	}
//	return 0;
//}

int GetNumberOfK(int* nums, int numsLen, int k) {
	// write code here
	int size = 0;
	for (int i = 0; i < numsLen; i++)
	{
		if (nums[i] == k)
		{
			size++;
		}
	}
	return size;
}

int convertInteger(int A, int B) {
    int k = 0;
    int t = 0;
    int p = A ^ B;
    while (t < 32)
    {
        if ((p >> t) & 1 == 1)
        {
            k++;
        }
        t++;
    }
    return k;
}

int dominantIndex(int* nums, int numsSize) {
    if (numsSize == 1)
    {
        return 0;
    }
    int max1 = nums[0] > nums[1] ? nums[0] : nums[1];
    int max2 = nums[0] > nums[1] ? nums[1] : nums[0];
    int max = nums[0] > nums[1] ? 0 : 1;
    for (int i = 2; i < numsSize; i++)
    {
        if (nums[i] > max1)
        {
            max2 = max1;
            max1 = nums[i];
            max = i;
        }
        else if (nums[i] > max2)
        {
            max2 = nums[i];
        }
    }
    if (max1 / 2 >= max2)
    {
        return max;
    }
    return -1;
}

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
    int max = nums1Size > nums2Size ? nums2Size : nums1Size;
    int* p = (int*)malloc(sizeof(int) * max);
    int arr[1001] = { 0 };
    *returnSize = 0;
    for (int i = 0; i < nums1Size; i++)
    {
        arr[nums1[i]]++;
    }
    for (int i = 0; i < 1001; i++)
    {
        for (int n = 0; n < nums2Size; n++)
        {
            if (arr[i] != 0 && i == nums2[n])
            {
                p[*returnSize] = i;
                (*returnSize)++;
                break;
            }
        }
    }
    return p;
}

//int main()
//{
//    int arr1[] = { 1,2,2,1 };
//    int arr2[] = { 2,2 };
//    int* num = (int*)malloc(sizeof(4));
//    int* p = intersection(arr1, 4, arr2, 2, num);
//    for (int i = 0; i < *num; i++)
//    {
//        printf("%d ", p[i]);
//    }
//    return 0;
//}

//int main()
//{
//    int arr[] = { 2,2,3,4,5,6 };
//    int* p = arr;
//    printf("%d ", *p++);
//    *p++;
//    printf("%d ", *p);
//    printf("%d ", arr[1]);
//    return 0;
//}

//int cmp(const void* x1, const void* x2)
//{
//    return strcmp((char*)x1, (char*)x2);
//}
//
//int main() {
//    char arr[1001] = { 0 };
//    scanf("%s", arr);
//    qsort(arr, strlen(arr), sizeof(char), cmp);
//    printf("%s", arr);
//    return 0;
//}

int pivotIndex(int* nums, int numsSize) {
    int sum = 0;
    int i = 0;
    for (i = 0; i < numsSize; i++)
    {
        sum += nums[i];
    }
    int ret = 0;
    for (int i = 0; i < numsSize; i++)
    {
        ret += nums[i];
        if (ret == sum)
        {
            return i;
        }
        sum -= nums[i];
    }
    return -1;
}

//int main()
//{
//    int arr[] = { -1,-1,-1,-1,-1,0 };
//    printf("%d", pivotIndex(arr, 6));
//    return 0;
//}

//int main() {
//    int arr[128] = { 0 };
//    char p[500] = { 0 };
//    scanf("%s", p);
//    for (int i = 0; i < strlen(p); i++)
//    {
//        arr[(int)p[i]]++;
//    }
//    int ret = 0;
//    for (int i = 0; i < 128; i++)
//    {
//        if (arr[i] != 0)
//        {
//            ret++;
//        }
//    }
//    printf("%d", ret);
//    return 0;
//}

int majorityElement(int* nums, int numsSize) {
    int k = 0;
    int num = nums[0];
    for (int i = 0; i < numsSize; i++)
    {
        if (num == nums[i])
        {
            k++;
        }
        else
        {
            k--;
        }
        if (k < 0)
        {
            num = nums[i];
            k = 0;
        }
    }
    return num;
}
